package com.zhava.crawler.domain.gateway;

import com.zhava.crawler.domain.enums.OutputFormatEnum;
import com.zhava.crawler.domain.model.Crawler;
import com.zhava.crawler.domain.model.PaginatedCrawler;

/**
 * 爬虫网关接口
 *
 * @author zhaxiang
 */
public interface CrawlerGateway {

    /**
     * 执行爬虫任务
     *
     * @param crawler 爬虫实体
     * @return 执行爬取后的爬虫实体
     */
    Crawler executeCrawling(Crawler crawler);

    /**
     * 执行分页式爬虫任务
     *
     * @param crawler 分页式爬虫实体
     * @return 执行爬取后的分页式爬虫实体
     */
    PaginatedCrawler executePaginatedCrawling(PaginatedCrawler crawler);

    /**
     * 提取网页内容
     *
     * @param crawler 爬虫实体
     * @param selector CSS选择器
     * @return 提取后的爬虫实体
     */
    Crawler extractContent(Crawler crawler, String selector);
    
    /**
     * 导出文件
     * 
     * @param crawler 爬虫实体
     * @return 导出后的文件路径，如果未导出则返回null
     */
    String exportFile(Crawler crawler);
    
    /**
     * 导出分页爬取结果文件
     * 
     * @param crawler 分页式爬虫实体
     * @return 导出后的文件路径，如果未导出则返回null
     */
    String exportPaginatedFile(PaginatedCrawler crawler);

    /**
     * 转换输出格式
     *
     * @param crawler 爬虫实体
     * @param format 输出格式
     * @return 转换后的数据
     */
    Object transformOutput(Crawler crawler, OutputFormatEnum format);
} 